package com.yanqu.road.entity.player;

import com.yanqu.road.entity.assistant.UserAssistantSuit;
import com.yanqu.road.entity.cricket.CricketData;
import com.yanqu.road.entity.curio.UserCurioSkillData;
import com.yanqu.road.entity.extension.ExtensionWineryItemInfo;
import com.yanqu.road.entity.inn.UserDishes;
import com.yanqu.road.entity.manor.FishData;
import com.yanqu.road.entity.manor.ManorTechnologyData;
import com.yanqu.road.entity.travelbook.UserTravelAlbum;
import com.yanqu.road.entity.travelbook.UserTravelCard;
import com.yanqu.road.entity.wingroom.UserFurnitureSample;
import com.yanqu.road.entity.wingroom.UserFurnitureSuitData;

import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author ：zfr
 * @date ：2022/3/20 17:46
 */
public class CalcPatronsAbilityParam {
    private Map<Integer, UserSkin> userSkinMap = new ConcurrentHashMap<>();                             //皮肤系统
    private Map<Integer, UserPatrons> patronsMap = new ConcurrentHashMap<>();                           //门客列表
    private Map<String, UserVehicle> vehicleMap = new ConcurrentHashMap<>();                            //珍兽列表
    private Map<Integer, UserBeauty> beautyMap = new ConcurrentHashMap<>();                             //美女列表
    private Map<Integer, UserDishes> userDishesMap = new ConcurrentHashMap<>();                         //客栈菜系加成
    private int embroideryMeter;                                                                        //霓裳卷加成
    private Map<Integer, ManorTechnologyData> manorTechnologyDataMap = new ConcurrentHashMap<>();       //庄园科技
    private Map<Integer, UserLTPMainRoleSkin> userLTPMainRoleSkinMap = new ConcurrentHashMap<>();       //限时主角服装加成
    private Map<Integer, FishData> fishDataMap = new ConcurrentHashMap<>();                             //鱼类加成
    private Map<Integer, BigInteger> grandChildProfessionSkillAdditionMap = new ConcurrentHashMap<>();  //山庄孙子加成
    private Map<Integer, UserAssistantSuit> userAssistantSuitMap = new ConcurrentHashMap<>();           //小助理服装
    private Map<Integer, UserFurnitureSample> furnitureMap = new ConcurrentHashMap<>();                 //厢房家具加成
    private Map<Integer, UserFurnitureSuitData> suitDataMap = new ConcurrentHashMap<>();                //厢房家具套装加成

    private Map<Integer, ExtensionWineryItemInfo> wineryItemInfoMap = new ConcurrentHashMap<>();

    private Map<Integer, CricketData> cricketDataMap = new ConcurrentHashMap<>();                             //鱼类加成
    private Map<Integer, UserPatronsSkinBond> userPatronsSkinBondMap = new ConcurrentHashMap<>();    //门客皮肤羁绊加成

    private Map<Integer, UserVehicleSoul> vehicleSoulMap = new ConcurrentHashMap<>();    //玩家身上的魂石
    private Map<Integer, UserVehicleBone> vehicleBoneMap = new ConcurrentHashMap<>();

    private Map<Integer, Long> wingRoomChakraQualificationAddMap = new HashMap<>();//厢房命盘-门客资质加成
    private Map<Integer, Long> wingRoomChakraAbilityAddMap = new HashMap<>();//厢房命盘-门客赚钱加成

    private Map<Integer, UserCurioSkillData> curioSkillDataMap = new ConcurrentHashMap<>();

    private Map<Integer, UserCombLeaderData> combLeaderDataMap = new ConcurrentHashMap<>();

    // 旅行册
    private Map<Integer, List<UserTravelAlbum>> travelBookBeautyMap = new ConcurrentHashMap<>();

    public Map<Integer, UserSkin> getUserSkinMap() {
        return userSkinMap;
    }

    public Map<Integer, UserPatrons> getPatronsMap() {
        return patronsMap;
    }

    public Map<String, UserVehicle> getVehicleMap() {
        return vehicleMap;
    }

    public Map<Integer, UserBeauty> getBeautyMap() {
        return beautyMap;
    }

    public Map<Integer, UserDishes> getUserDishesMap() {
        return userDishesMap;
    }

    public int getEmbroideryMeter() {
        return embroideryMeter;
    }

    public Map<Integer, ManorTechnologyData> getManorTechnologyDataMap() {
        return manorTechnologyDataMap;
    }

    public Map<Integer, UserLTPMainRoleSkin> getUserLTPMainRoleSkinMap() {
        return userLTPMainRoleSkinMap;
    }

    public Map<Integer, FishData> getFishDataMap() {
        return fishDataMap;
    }

    public Map<Integer, BigInteger> getGrandChildProfessionSkillAdditionMap() {
        return grandChildProfessionSkillAdditionMap;
    }

    public Map<Integer, UserAssistantSuit> getUserAssistantSuitMap() {
        return userAssistantSuitMap;
    }

    public Map<Integer, UserFurnitureSample> getFurnitureMap() {
        return furnitureMap;
    }

    public Map<Integer, UserFurnitureSuitData> getSuitDataMap() {
        return suitDataMap;
    }

    public Map<Integer, ExtensionWineryItemInfo> getWineryItemInfoMap() {
        return wineryItemInfoMap;
    }

    public Map<Integer, CricketData> getCricketDataMap() {
        return cricketDataMap;
    }

    public Map<Integer, UserPatronsSkinBond> getUserPatronsSkinBondMap() {
        return userPatronsSkinBondMap;
    }

    public Map<Integer, UserVehicleSoul> getVehicleSoulMap() {
        return vehicleSoulMap;
    }

    public Map<Integer, UserVehicleBone> getVehicleBoneMap() {
        return vehicleBoneMap;
    }

    public Map<Integer, Long> getWingRoomChakraQualificationAddMap() {
        return wingRoomChakraQualificationAddMap;
    }

    public Map<Integer, Long> getWingRoomChakraAbilityAddMap() {
        return wingRoomChakraAbilityAddMap;
    }

    public Map<Integer, UserCurioSkillData> getCurioSkillDataMap() {
        return curioSkillDataMap;
    }

    public Map<Integer, UserCombLeaderData> getCombLeaderDataMap() {
        return combLeaderDataMap;
    }

    public Map<Integer, List<UserTravelAlbum>> getTravelBookBeautyMap() {
        return travelBookBeautyMap;
    }

    public static final class CalcPatronsAbilityParamBuilder {
        private Map<Integer, UserSkin> userSkinMap = new ConcurrentHashMap<>();
        private Map<Integer, UserPatrons> patronsMap = new ConcurrentHashMap<>();
        private Map<String, UserVehicle> vehicleMap = new ConcurrentHashMap<>();
        private Map<Integer, UserBeauty> beautyMap = new ConcurrentHashMap<>();
        private Map<Integer, UserDishes> userDishesMap = new ConcurrentHashMap<>();
        private int embroideryMeter;
        private Map<Integer, ManorTechnologyData> manorTechnologyDataMap = new ConcurrentHashMap<>();
        private Map<Integer, UserLTPMainRoleSkin> userLTPMainRoleSkinMap = new ConcurrentHashMap<>();
        private Map<Integer, FishData> fishDataMap = new ConcurrentHashMap<>();
        private Map<Integer, BigInteger> grandChildProfessionSkillAdditionMap = new ConcurrentHashMap<>();
        private Map<Integer, UserAssistantSuit> userAssistantSuitMap = new ConcurrentHashMap<>();
        private Map<Integer, UserFurnitureSample> furnitureMap = new ConcurrentHashMap<>();
        private Map<Integer, UserFurnitureSuitData> suitDataMap = new ConcurrentHashMap<>();

        private Map<Integer, ExtensionWineryItemInfo> wineryItemInfoMap = new ConcurrentHashMap<>();

        private Map<Integer, CricketData> cricketDataMap = new ConcurrentHashMap<>();
        private Map<Integer, UserPatronsSkinBond> userPatronsSkinBondMap = new ConcurrentHashMap<>();    //门客皮肤羁绊加成

        private Map<Integer, UserVehicleSoul> vehicleSoulMap = new ConcurrentHashMap<>();    //魂石
        private Map<Integer, UserVehicleBone> vehicleBoneMap = new ConcurrentHashMap<>();

        private Map<Integer, Long> wingRoomChakraQualificationAddMap = new HashMap<>();//厢房命盘-门客资质加成
        private Map<Integer, Long> wingRoomChakraAbilityAddMap = new HashMap<>();//厢房命盘-门客赚钱加成

        private Map<Integer, UserCurioSkillData> curioSkillDataMap = new ConcurrentHashMap<>();
        private Map<Integer, UserCombLeaderData> combLeaderDataMap = new ConcurrentHashMap<>();
        private Map<Integer, List<UserTravelAlbum>> travelBookBeautyMap = new ConcurrentHashMap<>();

        private CalcPatronsAbilityParamBuilder() {
        }

        public static CalcPatronsAbilityParamBuilder aCalcPatronsAbilityParam() {
            return new CalcPatronsAbilityParamBuilder();
        }

        public CalcPatronsAbilityParamBuilder withUserSkinMap(Map<Integer, UserSkin> userSkinMap) {
            this.userSkinMap = userSkinMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withPatronsMap(Map<Integer, UserPatrons> patronsMap) {
            this.patronsMap = patronsMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withVehicleMap(Map<String, UserVehicle> vehicleMap) {
            this.vehicleMap = vehicleMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withBeautyMap(Map<Integer, UserBeauty> beautyMap) {
            this.beautyMap = beautyMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withUserDishesMap(Map<Integer, UserDishes> userDishesMap) {
            this.userDishesMap = userDishesMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withEmbroideryMeter(int embroideryMeter) {
            this.embroideryMeter = embroideryMeter;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withManorTechnologyDataMap(Map<Integer, ManorTechnologyData> manorTechnologyDataMap) {
            this.manorTechnologyDataMap = manorTechnologyDataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withUserLTPMainRoleSkinMap(Map<Integer, UserLTPMainRoleSkin> userLTPMainRoleSkinMap) {
            this.userLTPMainRoleSkinMap = userLTPMainRoleSkinMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withFishDataMap(Map<Integer, FishData> fishDataMap) {
            this.fishDataMap = fishDataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withGrandChildProfessionSkillAdditionMap(Map<Integer, BigInteger> grandChildProfessionSkillAdditionMap) {
            this.grandChildProfessionSkillAdditionMap = grandChildProfessionSkillAdditionMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withUserAssistantSuitMap(Map<Integer, UserAssistantSuit> userAssistantSuitMap) {
            this.userAssistantSuitMap = userAssistantSuitMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withFurnitureMap(Map<Integer, UserFurnitureSample> furnitureMap) {
            this.furnitureMap = furnitureMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withSuitDataMap(Map<Integer, UserFurnitureSuitData> suitDataMap) {
            this.suitDataMap = suitDataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withWineryItemInfoMap(Map<Integer, ExtensionWineryItemInfo> wineryItemInfoMap) {
            this.wineryItemInfoMap = wineryItemInfoMap;
            return this;
        }


        public CalcPatronsAbilityParamBuilder withCricketDataMap(Map<Integer, CricketData> cricketDataMap) {
            this.cricketDataMap = cricketDataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withUserPatronsSkinBondDataMap(Map<Integer, UserPatronsSkinBond> dataMap) {
            this.userPatronsSkinBondMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withUserVehicleSoulMap(Map<Integer, UserVehicleSoul> dataMap) {
            this.vehicleSoulMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withUserVehicleBoneMap(Map<Integer, UserVehicleBone> dataMap) {
            this.vehicleBoneMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withWingRoomChakraQualificationAddMap(Map<Integer, Long> dataMap) {
            this.wingRoomChakraQualificationAddMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withWingRoomChakraAbilityAddMap(Map<Integer, Long> dataMap) {
            this.wingRoomChakraAbilityAddMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withCurioSkillDataMap(Map<Integer, UserCurioSkillData> dataMap){
            this.curioSkillDataMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withCombLeaderDataMap(Map<Integer, UserCombLeaderData> dataMap){
            this.combLeaderDataMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParamBuilder withTravelBookBeautyMap(Map<Integer, List<UserTravelAlbum>> dataMap){
            this.travelBookBeautyMap = dataMap;
            return this;
        }

        public CalcPatronsAbilityParam build() {
            CalcPatronsAbilityParam calcPatronsAbilityParam = new CalcPatronsAbilityParam();
            calcPatronsAbilityParam.grandChildProfessionSkillAdditionMap = this.grandChildProfessionSkillAdditionMap;
            calcPatronsAbilityParam.vehicleMap = this.vehicleMap;
            calcPatronsAbilityParam.fishDataMap = this.fishDataMap;
            calcPatronsAbilityParam.embroideryMeter = this.embroideryMeter;
            calcPatronsAbilityParam.patronsMap = this.patronsMap;
            calcPatronsAbilityParam.furnitureMap = this.furnitureMap;
            calcPatronsAbilityParam.userLTPMainRoleSkinMap = this.userLTPMainRoleSkinMap;
            calcPatronsAbilityParam.manorTechnologyDataMap = this.manorTechnologyDataMap;
            calcPatronsAbilityParam.suitDataMap = this.suitDataMap;
            calcPatronsAbilityParam.beautyMap = this.beautyMap;
            calcPatronsAbilityParam.userDishesMap = this.userDishesMap;
            calcPatronsAbilityParam.userSkinMap = this.userSkinMap;
            calcPatronsAbilityParam.userAssistantSuitMap = this.userAssistantSuitMap;
            calcPatronsAbilityParam.wineryItemInfoMap = this.wineryItemInfoMap;
            calcPatronsAbilityParam.cricketDataMap = this.cricketDataMap;
            calcPatronsAbilityParam.userPatronsSkinBondMap = this.userPatronsSkinBondMap;
            calcPatronsAbilityParam.vehicleSoulMap = this.vehicleSoulMap;
            calcPatronsAbilityParam.vehicleBoneMap = this.vehicleBoneMap;
            calcPatronsAbilityParam.wingRoomChakraQualificationAddMap = this.wingRoomChakraQualificationAddMap;
            calcPatronsAbilityParam.wingRoomChakraAbilityAddMap = this.wingRoomChakraAbilityAddMap;
            calcPatronsAbilityParam.curioSkillDataMap = this.curioSkillDataMap;
            calcPatronsAbilityParam.combLeaderDataMap = this.combLeaderDataMap;
            calcPatronsAbilityParam.travelBookBeautyMap = this.travelBookBeautyMap;
            return calcPatronsAbilityParam;
        }
    }
}
